Adam Reis
ahr2127
3/11/15
In this lab, we experimentally determined the charge to mass ratio of the electron (e/m). We measured a value of 9.74E10 +/- 4.86E09 C/kg for e/m, which is about half as large as the accepted value of 1.758E11. We will discuss reasons why this may be so far off. We also measured the strength of the Earth's magnetic field (Be) two different ways. Our original estimate was that Be = 3.02E-05 T, which we later confirmed with a more thorough measurement of Be = 3.11E-05 +/- 1.76E-05 T.
First, we align the structure so that the magnetic field produced by the Helmholtz coils is facing the same direction as the magnetic field of the earth. The horizontal arm of the dip needle support was rotated so that the needle and the plastic protractor were horizontal. Then we waited for the compass needle to come to rest and rotated the frame until the needle was aligned along the 90-270 degree line on the protractor. Next the horizontal arm of the dip needle support was rotated so that the needle and plastic protractor were in a vertical plan and then needle was allowed to come to rest. Then the wingnut was loosened and one side of the coils was gently raised and the angle was increased until the dip needle was aligned along the 0-180 degree line and then the wingnut was tightened. Then we did some more preliminary adjustments, like rotating the tube slightly in its mounting so that the electrons come out parallel to the plane of the coils. Then the current required to cancel the ambient magnetic field was found by adjusting the current on 200 mA scale until the electrons travelled along a straight line. We then moved on to the main part of the experiment: measuring the radius of a circular orbit. The voltage was set to 20 V and the current I was adjusted until the outer edge of the electron beam struck the outside edge of one of the measurement bars. The I was recorded for all 5 measurement bars and this was procedure was also done for 30 V, 40 V, and 50 V.
I left in all the code, so you can see exactly what we calculated (and how much work we did!). All important values are either shown on the graph or are printed. Note that the graph does have error bars for both axes, although they may not be visible.
N = 72
R = .33
from math import pi, sqrt
C = (4*pi * 10**-7 * N) / (R * (1 + 1/4)**(3/2))
radii = map(lambda x: x * 10**-2, [3.24, 3.88, 4.51, 5.15, 5.77])
# prelimary adjustments
offset_i = .11 # A
prelim_Be = offset_i * C
print('Be = {}'.format(prelim_Be))
# this changes dramatically when lights are turned on and off
uncertainty_v = 1.1 # V
uncertainty_i = .03 # A
uncertainty_r = .005 # M
volt_i = { # V: [(I, r), (I, r), ...]
20: [(1.15, radii[4]),
(1.28, radii[3]),
(1.46, radii[2]),
(1.75, radii[1]),
(2.15, radii[0])],
30: [(1.40, radii[4]),
(1.59, radii[3]),
(1.82, radii[2]),
(2.20, radii[1]),
(2.62, radii[0])],
40: [(1.71, radii[4]),
(1.98, radii[3]),
(2.28, radii[2]),
(2.60, radii[1]),
(3.15, radii[0])],
50: [(1.97, radii[4]),
(2.21, radii[3]),
(2.58, radii[2]),
(3.05, radii[1]),
(3.59, radii[0])],
60: [(2.12, radii[4]),
(2.41, radii[3]),
(2.69, radii[2]),
(3.17, radii[1]),
(3.80, radii[0])]
}
import numpy as np
def lsqfity(X, Y):
"""
Copied from http://stackoverflow.com/questions/27764220/retrieve-the-standard-deviation-of-the-y-intercept
Calculate a "MODEL-1" least squares fit.
The line is fit by MINIMIZING the residuals in Y only.
The equation of the line is: Y = my * X + by.
Equations are from Bevington & Robinson (1992)
Data Reduction and Error Analysis for the Physical Sciences, 2nd Ed."
pp: 104, 108-109, 199.
Data are input and output as follows:
my, by, ry, smy, sby = lsqfity(X,Y)
X = x data (vector)
Y = y data (vector)
my = slope
by = y-intercept
ry = correlation coefficient
smy = standard deviation of the slope
sby = standard deviation of the y-intercept
"""
X, Y = map(np.asanyarray, (X, Y))
# Determine the size of the vector.
n = len(X)
# Calculate the sums.
Sx = np.sum(X)
Sy = np.sum(Y)
Sx2 = np.sum(X ** 2)
Sxy = np.sum(X * Y)
Sy2 = np.sum(Y ** 2)
# Calculate re-used expressions.
num = n * Sxy - Sx * Sy
den = n * Sx2 - Sx ** 2
# Calculate my, by, ry, s2, smy and sby.
my = num / den
by = (Sx2 * Sy - Sx * Sxy) / den
ry = num / (np.sqrt(den) * np.sqrt(n * Sy2 - Sy ** 2))
diff = Y - by - my * X
s2 = np.sum(diff * diff) / (n - 2)
smy = np.sqrt(n * s2 / den)
sby = np.sqrt(Sx2 * s2 / den)
return my, by, ry, smy, sby
%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.add_axes([0, 0, 2, 2])
colors = ['r', 'c', 'm', 'y', 'k']
axes.set_title('I vs 1/r', size='xx-large')
axes.set_xlabel('$1/r\ \ \ (M^{-1})$', size='large')
axes.set_ylabel('Current (I)', size='large')
# text_x = 32.5
text_x = 31.2
text_ys = [3.78, 3.57, 3.12, 2.6, 2.12]
measurements = []
for v in sorted(volt_i.keys()):
color = colors.pop()
r_measurements = volt_i[v]
I, r_original = zip(*r_measurements)
r = [1./x for x in r_original]
r_errors = [uncertainty_r/(1-x-uncertainty_r) for x in r_original]
A, D, r_coef, dA, dD = lsqfity(r, I)
fit_fn = np.poly1d((A, D))
measurements.append((v, A, D, r_coef, dA, dD))
axes.errorbar(r, I, yerr=uncertainty_i, xerr=r_errors, fmt=color+'o')
axes.plot(r, fit_fn(r), color, label='{} V'.format(v))
axes.text(text_x, text_ys.pop(), r'$I = %.3f\cdot\frac{1}{r}%.3f,\ \ \sigma_A=%.4f,\ \sigma_D=%.4f$'%(A, D, dA, dD), size='x-large', backgroundcolor='w')
axes.legend(loc=2)
print('v\te/m\t\tdem\t\tBe\t\tdBe')
ems = []
dems = []
Bes = []
dBes = []
for v, A, D, r_coef, dA, dD in measurements:
em = 2.*v/(A*C)**2
dem = abs(2.*v/((A+dA)*C)**2 - em)
Be = abs(D*C)
dBe = C*dD
ems.append(em)
dems.append(dem)
Bes.append(Be)
dBes.append(dBe)
print('{}\t{:E} \t{:E} \t{:E}\t{:E}'.format(v, em, dem, Be, dBe))
final_em = np.average(np.array(ems), weights=1./np.array(dems))
final_be = np.average(np.array(Bes), weights=1./np.array(dBes))
em_var = np.sqrt(np.average((np.array(ems)-final_em)**2, weights=1./np.array(dems)))
be_var = np.sqrt(np.average((np.array(Bes)-final_be)**2, weights=1./np.array(dBes)))
print('Weighted average of e/m measurements: {:E} +/- {:E}'.format(final_em, em_var))
print('Weighted average of Be measurements: {:E} +/- {:E}'.format(final_be, be_var))
Yes. Our result is almost have as large as the accepted value, and the accepted value is not within our expected error.
Most of these could be fixed either by using more precise lab equipment (that's less susceptible to power fluctuations), or by taking more time with our measurements. We are always eager to get out of lab early (and we were actually the last group in the lab), so we may have rushed things a bit.
Upon further exploration, it seems that our measurements for smaller values of r are more precise. This may seem unexpected, but it makes sense given the conditions of the experiment. For smaller values of r, the increased current kept the electrons in a tighter ring. This was significantly easier to dial in and measure than the larger, less defined, rings, and was less susceptible to interference.
Yes! Our measured and predicted values are almost exactly the same. This might have been a fluke, but it's pretty cool.
In this lab, we experimentally determined the charge to mass ratio of the electron (e/m) to be 9.74E10 +/- 4.86E09 C/kg, which is about half as large as the accepted value of 1.758E11. I discussed several reasons why this may be so far off, as well as strategies for counteracting these in the future. We also measured the strength of the Earth's magnetic field (Be) two different ways. Our original estimate was that Be = 3.02E-05 T, which we later confirmed with a more thorough measurement of Be = 3.11E-05 +/- 1.76E-05 T. Although these measurements are very close, we expect that we just got lucky, and that they were still affected by the same systematic errors we discussed.
from IPython.display import Image
Image(filename='images/scratch1.jpg')
Image(filename='images/scratch2.jpg')